#ifndef FS_INODE_H
#define FS_INODE_H

#include "stdint.h"
#include "list.h"
#include "global.h" 
#include "ide.h"

struct inode {
    uint32_t i_no; // 4 inode编号
    uint32_t i_size; // 4 inode若为文件,为文件大小；若为目录,为目录项大小之和

    uint32_t i_open_cnts; // 4 打开该文件次数
    bool write_deny; // 1 标记该文件正在被写
    uint32_t i_sectors[13]; // 4*13 0-11是直接块, 12数一级间接块指针

    struct list_elem inode_tag; // 4*2 标记, 加入已打开inode队列
}; // 4+4+4+1+4*13+4*2 = 73

/* 函数声明 */
void inode_sync(struct partition* part, struct inode* inode, void* io_buf);
struct inode* inode_open(struct partition* part, uint32_t inode_no);
void inode_close(struct inode* inode);
void inode_init(uint32_t inode_no, struct inode* new_inode);
void inode_delete(struct partition *part, uint32_t inode_no, void *io_buf);
void inode_release(struct partition *part, uint32_t inode_no);
#endif // FS_INODE_H